using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class Compras_OrdenesCompras : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        lb_error.Visible = false;
        lb_errorBuscar.Visible = false;
        ib_buscar.Focus();
         }
    protected void ib_agregar_Click(object sender, ImageClickEventArgs e)
    {
        fs_listaOrdenesCompras.Visible = false;
        fs_agregarOC.Visible = true;
        fs_buscar.Visible = false;
        fs_detallesOC.Visible = true;
        Image3.Visible = false;
        mostrar.Visible = false;
    }

    protected void buscarOrdenCompra (string tabla, string cadena, string ingresado)
    {
       sqlDt_ordenesCompras.SelectParameters.Clear();
       sqlDt_ordenesCompras.SelectCommand = "SELECT Ordenes_Compras.cod_orden_compra, Ordenes_Compras.fecha, Ordenes_Compras.cod_proveedor, Ordenes_Compras.cod_moneda, Ordenes_Compras.importe_total, Ordenes_Compras.importe_total_me, Monedas.descripcion, Proveedores.nombre_empresa FROM Ordenes_Compras JOIN Monedas ON Monedas.cod_moneda = Ordenes_Compras.cod_moneda JOIN Proveedores ON Proveedores.cod_proveedor = Ordenes_Compras.cod_proveedor WHERE "+ tabla+"." + cadena + " like @" + cadena;

       sqlDt_ordenesCompras.SelectParameters.Add(cadena, TypeCode.String, "%");
       sqlDt_ordenesCompras.SelectParameters[cadena].DefaultValue = ingresado + "%";

    }

    protected void buscarPorFecha(string fecha)
    {
        sqlDt_ordenesCompras.SelectParameters.Clear();
        sqlDt_ordenesCompras.SelectCommand = "SELECT Ordenes_Compras.cod_orden_compra, Ordenes_Compras.fecha, Ordenes_Compras.cod_proveedor, Ordenes_Compras.cod_moneda, Ordenes_Compras.importe_total, Ordenes_Compras.importe_total_me, Monedas.descripcion, Proveedores.nombre_empresa FROM Ordenes_Compras JOIN Monedas ON Monedas.cod_moneda = Ordenes_Compras.cod_moneda JOIN Proveedores ON Proveedores.cod_proveedor = Ordenes_Compras.cod_proveedor WHERE CONVERT(varchar,fecha,103) = CONVERT(varchar, @fecha ,103)";

        sqlDt_ordenesCompras.SelectParameters.Add("fecha", TypeCode.DateTime, "%");
        sqlDt_ordenesCompras.SelectParameters["fecha"].DefaultValue = fecha;
   

    }
    protected void ib_buscar_Click(object sender, ImageClickEventArgs e)
    {
        try
        {

            int num = 0;
            if (tb_proveedorBuscar.Text != String.Empty)
            {
                buscarOrdenCompra("Proveedores", "nombre_empresa", tb_proveedorBuscar.Text);
                num++;
            }
            if (tb_fecha_buscar.Text != String.Empty)
            {
                if (num == 0)
                {
                    if (Validar.validarFecha(tb_fecha_buscar.Text))
                    {
                        buscarPorFecha(tb_fecha_buscar.Text);
                        num++;
                    }
                    else
                    {
                        lb_fecharError.Visible = true;
                    }

                }
                else
                {

                    sqlDt_ordenesCompras.SelectCommand += " and CONVERT(varchar,fecha,103) = CONVERT(varchar, @fecha1 ,103)";
                    sqlDt_ordenesCompras.SelectParameters.Add("fecha1", TypeCode.DateTime, tb_fecha_buscar.Text);
                    num++;
                }
            }

            gv_ordenesCompras.DataBind();
        }
        catch
        {
            lb_errorBuscar.Visible = true;
        }
    }

    protected void gv_ordenesCompras_RowCommand(Object sender, GridViewCommandEventArgs e)
    {
        sqlDt_ordenesCompras.SelectCommand ="SELECT Ordenes_Compras.cod_orden_compra, Ordenes_Compras.fecha, Ordenes_Compras.cod_proveedor, Ordenes_Compras.cod_moneda,  Ordenes_Compras.importe_total, Ordenes_Compras.importe_total_me, Monedas.descripcion, Proveedores.nombre_empresa FROM Ordenes_Compras JOIN Monedas ON Monedas.cod_moneda = Ordenes_Compras.cod_moneda JOIN Proveedores ON Proveedores.cod_proveedor = Ordenes_Compras.cod_proveedor";
        
        gv_ordenesCompras.SelectedIndex = Convert.ToInt32(e.CommandArgument);
       
        GridViewRow row = gv_ordenesCompras.SelectedRow;

        int cod_orden_compra = Convert.ToInt32(row.Cells[0].Text);
        if (e.CommandName == "ver")
        {
            //gv_ordenesCompras.Visible = false;
            sqlDS_detallesOrdenesCompras.SelectParameters.Clear();
            sqlDS_detallesOrdenesCompras.SelectCommand = "SELECT Detalles_Orden_Compras.cod_orden_compra, Detalles_Orden_Compras.nro_renglon, Detalles_Orden_Compras.cod_producto, Productos.nombre, Detalles_Orden_Compras.cantidad,Detalles_Orden_Compras.importe_gs, Detalles_Orden_Compras.importe_me, Detalles_Orden_Compras.cantidad_recibida, Detalles_Orden_Compras.costo_unitario FROM Detalles_Orden_Compras JOIN Productos ON Productos.cod_producto = Detalles_Orden_Compras.cod_producto WHERE cod_orden_compra ="+ cod_orden_compra;
            gv_detallesOrdenesCompras.DataBind();
            gv_detallesOrdenesCompras.Visible = true;
            ib_listoDetallesOrdenes.Visible = true;
        }
       if(e.CommandName=="Borrar"){
           try
           {
               OrdenesCompras.eliminarOrdenesCompras(cod_orden_compra);
               gv_ordenesCompras.DataBind();
           }
           catch
           {
               lb_error.Visible = true;
           }
       }

    }
    protected void gv_proveedoresPopUp_RowCommand(Object sender, GridViewCommandEventArgs e)
    {
        gv_proveedoresPopUp.SelectedIndex = Convert.ToInt32(e.CommandArgument);
        GridViewRow row = gv_proveedoresPopUp.SelectedRow;
        string cod_proveedor = row.Cells[0].Text;
        string nombreEmpresa = row.Cells[1].Text;
        if (e.CommandName == "agregar")
        {
            tb_codProveedor_agregar.Text = cod_proveedor;
            tb_nombreEmpresaAgregar.Text = nombreEmpresa;
            /*tb_empresaProveedora.Text = empresa;
            tb_proveedor.Text = nombreProveedor;*/
            //p_popUpProveedor.Visible = false;
            //fs_proveedores.Visible = false;
            mpe_proveedores.Hide();
        }
        SqlDataSource_Productos.SelectParameters.Clear();
        SqlDataSource_Productos.SelectCommand = "SELECT DISTINCT Productos.cod_producto, Productos.nombre AS Descripcion, Marcas.descripcion AS Marca, Modelo_Productos.descripcion AS Modelo, Familias_Productos.descripcion AS Familia, Familias_Productos.iva AS IVA, Productos.precio_venta AS PrecioVenta FROM Productos INNER JOIN Familias_Productos ON Productos.cod_familia_producto = Familias_Productos.cod_familia_producto INNER JOIN Modelo_Productos ON Productos.cod_modelo = Modelo_Productos.cod_modelo INNER JOIN Marcas ON Productos.cod_marca = Marcas.cod_marca INNER JOIN Detalles_Cotizaciones ON Productos.cod_producto = Detalles_Cotizaciones.cod_producto INNER JOIN Cotizaciones ON Cotizaciones.cod_cotizacion = Detalles_Cotizaciones.cod_cotizacion AND Cotizaciones.cod_proveedor =  "+ Convert.ToInt32(tb_codProveedor_agregar.Text);
        gv_productos.DataBind();
        ib_popUpProductos.Enabled = true;
    }
    protected void devuelve_maxCodOrdenCompra()
    {
        String cadena = (String)ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
        SqlConnection conexion = new SqlConnection(cadena);

        SqlCommand codigoFactura = new SqlCommand("Select max(cod_orden_compra) from Ordenes_Compras", conexion);
        try
        {
            conexion.Open();
            codigoFactura.Connection = conexion;
            codigoFactura.CommandType = CommandType.Text;
            SqlDataReader read1 = codigoFactura.ExecuteReader();
            read1.Read();
            string respuesta = read1.GetValue(0).ToString();
            read1.Close();

            lb_resultadoMaxCod.Text = respuesta;
        }
        catch (Exception error)
        {
            Response.Write("<SCRIPT language=\"javascript\"> window.alert(\"" + error.Message.ToString() + "\") </SCRIPT>");

        }
        finally
        {

            conexion.Close();
        }
    }
    protected void ib_guardarAgregar_Click(object sender, ImageClickEventArgs e)
    {
        Page.Validate("campoVacio");
        
        if (Page.IsValid)
        {
            ib_guardarAgregar.Visible = false;
            ib_guardarDetalles.Visible = true;
            ib_listoDetalle.Visible = true;
            int cod_proveedor = Convert.ToInt32(tb_codProveedor_agregar.Text);
            int cod_moneda = Convert.ToInt32(ddl_monedasAgregar.SelectedValue);


            OrdenesCompras.agregarOrdenesCompras(cod_proveedor, cod_moneda);
            devuelve_maxCodOrdenCompra();

            int cod_orden_compra = Convert.ToInt32(lb_resultadoMaxCod.Text);
            int cod_producto = Convert.ToInt32(tb_codProducto.Text);
            int cantidad = Convert.ToInt32(tb_cantidad.Text);
        
        try
        {

           
            OrdenesCompras.agregarDetallesOrdenesCompras(cod_orden_compra, cod_producto, cantidad);
            limpiarCamposAgregarDetalles();
            tb_codProveedor_agregar.Enabled = false;
            ddl_monedasAgregar.Enabled = false;
            ib_proveedorPopUpAgregar.Enabled = false;
            sqlDS_detallesAgregados.SelectParameters.Clear();
            sqlDS_detallesAgregados.SelectCommand = "SELECT Detalles_Orden_Compras.cod_orden_compra, Detalles_Orden_Compras.nro_renglon, Detalles_Orden_Compras.cod_producto, Productos.nombre, Detalles_Orden_Compras.cantidad, Detalles_Orden_Compras.importe_gs, Detalles_Orden_Compras.importe_me, Detalles_Orden_Compras.cantidad_recibida, Detalles_Orden_Compras.costo_unitario FROM Detalles_Orden_Compras JOIN Productos ON Productos.cod_producto = Detalles_Orden_Compras.cod_producto WHERE Detalles_Orden_Compras.cod_orden_compra =" + cod_orden_compra;
            gv_detallesAgregados.Visible = true;
        }
        catch (Exception error)
        {
           // Response.Write("<SCRIPT language=\javascript\"> window.alert(\"" + error.Message.ToString() + "\") </SCRIPT>");
            OrdenesCompras.eliminarOrdenesCompras(cod_orden_compra);

        }
    }
    }
    
    protected void buscarProveedor(string cadena, string ingresado)
    {
        sqlDS_proveedoresPopUp.SelectParameters.Clear();
        sqlDS_proveedoresPopUp.SelectCommand = "SELECT cod_proveedor, nombre_empresa, direccion_empresa, telefono_empresa FROM Proveedores WHERE " + cadena + " like '" + ingresado + "%'";

    }
    protected void ib_buscarPopUp_Click(object sender, ImageClickEventArgs e)
    {

        int num = 0;
        if (tb_codProveedorPopUp.Text != String.Empty)
        {
            buscarProveedor("cod_proveedor", tb_codProveedorPopUp.Text);
            mpe_proveedores.Show();
            num++;
        }
        if (tb_nombreEmpresaPopUp.Text != String.Empty)
        {
            if (num == 0)
            {
                buscarProveedor("nombre_empresa", tb_nombreEmpresaPopUp.Text);
                mpe_proveedores.Show();
            }
            else

                sqlDS_proveedoresPopUp.SelectCommand += " and nombre_empresa=@nombre";
            sqlDS_proveedoresPopUp.SelectParameters.Add("nombre", TypeCode.String, tb_nombreEmpresaPopUp.Text);
            num++;

            mpe_proveedores.Show();
        }
        gv_proveedoresPopUp.DataBind();
    }

    protected void mostrarTodosProveedores()
    {
        sqlDS_proveedoresPopUp.SelectParameters.Clear();
        sqlDS_proveedoresPopUp.SelectCommand = "SELECT cod_proveedor, nombre_empresa, direccion_empresa, telefono_empresa FROM Proveedores";
        gv_proveedoresPopUp.DataBind();
    }
  
    protected void ib_cancelarPopUpProveedores_Click1(object sender, ImageClickEventArgs e)
    {
        tb_nombreEmpresaPopUp.Text = string.Empty;
        tb_codProveedorPopUp.Text = string.Empty;
        mostrarTodosProveedores();

    }

    /***************************************
     * 
     * Metodos para PopUpProductos
     * 
     * *************************************/
    protected void ib_popUpProducto_Click(object sender, ImageClickEventArgs e)
    {
        mostrarTodosLosProductos();
        mostrarPopUpProducto();
        tb_codProductoPopUp.Focus();
    }
    /*metodo para mostrar el popUp de Productos*/
    protected void mostrarPopUpProducto()
    {
        mpe_productos.Show();
    }
    /*Metodo para buscar productos*/
    protected void buscarProduto(string tabla, string cadena, string ingresado)
    {
        SqlDataSource_Productos.SelectParameters.Clear();
        SqlDataSource_Productos.SelectCommand = "SELECT Productos.cod_producto,Productos.nombre as Descripcion,Marcas.descripcion as Marca,Modelo_Productos.descripcion as Modelo ,Familias_Productos.descripcion as Familia, Familias_Productos.iva as IVA, Productos.precio_venta as PrecioVenta FROM Productos JOIN Familias_Productos ON Productos.cod_familia_producto= Familias_Productos.cod_familia_producto JOIN Modelo_Productos ON Productos.cod_modelo = Modelo_Productos.cod_modelo JOIN Marcas ON Productos.cod_marca = Marcas.cod_marca WHERE " + tabla + "." + cadena + " like @" + cadena;

        SqlDataSource_Productos.SelectParameters.Add(cadena, TypeCode.String, "%");
        SqlDataSource_Productos.SelectParameters[cadena].DefaultValue = ingresado + "%";

    }
    protected void mostrarTodosLosProductos()
    {
        SqlDataSource_Productos.SelectParameters.Clear();
        SqlDataSource_Productos.SelectCommand = "SELECT DISTINCT Productos.cod_producto, Productos.nombre AS Descripcion, Marcas.descripcion AS Marca, Modelo_Productos.descripcion AS Modelo, Familias_Productos.descripcion AS Familia, Familias_Productos.iva AS IVA, Productos.precio_venta AS PrecioVenta FROM Productos INNER JOIN Familias_Productos ON Productos.cod_familia_producto = Familias_Productos.cod_familia_producto INNER JOIN Modelo_Productos ON Productos.cod_modelo = Modelo_Productos.cod_modelo INNER JOIN Marcas ON Productos.cod_marca = Marcas.cod_marca INNER JOIN Detalles_Cotizaciones ON Productos.cod_producto = Detalles_Cotizaciones.cod_producto INNER JOIN Cotizaciones ON Cotizaciones.cod_cotizacion = Detalles_Cotizaciones.cod_cotizacion AND Cotizaciones.cod_proveedor =  " + Convert.ToInt32(tb_codProveedor_agregar.Text);
        gv_productos.DataBind();
    }

    protected void ib_buscarProductoPopUp_Click(object sender, ImageClickEventArgs e)
    {
        /*Buscar por codigo del producto*/
        tb_codProductoPopUp.Focus();
        if (tb_codProductoPopUp.Text != string.Empty)
        {

            buscarProduto("Productos", "cod_producto", tb_codProductoPopUp.Text);
            mostrarPopUpProducto();


        }/*buscar por nombre del producto*/
        if (tb_nombreProductoPopUp.Text != string.Empty)
        {
            buscarProduto("Productos", "nombre", tb_nombreProductoPopUp.Text);
            mostrarPopUpProducto();
        }/*buscar por marca del producto*/
        if (tb_marcaProductoPopUp.Text != string.Empty)
        {
            buscarProduto("Marcas", "descripcion", tb_marcaProductoPopUp.Text);
            mostrarPopUpProducto();
        }/*buscar por modelo del producto*/
        if (tb_modeloProductoPopUp.Text != string.Empty)
        {
            buscarProduto("Modelo_Productos", "descripcion", tb_modeloProductoPopUp.Text);
            mostrarPopUpProducto();

        }/*buscar por familia de producto*/
        if (tb_familiaProdutoPopUp.Text != string.Empty)
        {
            buscarProduto("Familias_Productos", "descripcion", tb_familiaProdutoPopUp.Text);
            mostrarPopUpProducto();
        }
        if (tb_codProductoPopUp.Text.Equals("") && tb_nombreProductoPopUp.Text.Equals("") && tb_marcaProductoPopUp.Text.Equals("") && tb_modeloProductoPopUp.Text.Equals("") && tb_familiaProdutoPopUp.Text.Equals(""))
        {
            mostrarTodosLosProductos();
            mostrarPopUpProducto();
        }
    }
    /*Se obtienen los datos de la fila seleccionada*/
    protected void gvProductos_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        gv_productos.SelectedIndex = Convert.ToInt32(e.CommandArgument);
        GridViewRow row = gv_productos.SelectedRow;
        string cod_producto = row.Cells[0].Text;
        string nombreProducto = row.Cells[1].Text;
        string marca = row.Cells[2].Text;
        string modelo = row.Cells[3].Text;
        string familiaProducto = row.Cells[4].Text;
        if (e.CommandName == "agregarProducto")
        {
            tb_codProducto.Text = cod_producto;
            tb_nombreProducto.Text = nombreProducto;
            //tb_marcaAgregarProducto.Text = marca;
            //p_popUpProductos.Visible = false;
            //fs_productos.Visible = false;

            mpe_productos.Hide();
        }
        limpiarCamposPopUpProductos();
        mostrarTodosLosProductos();
    }
    protected void limpiarCamposPopUpProductos()
    {
        tb_nombreProductoPopUp.Text = string.Empty;
        tb_marcaProductoPopUp.Text = string.Empty;
        tb_codProductoPopUp.Text = string.Empty;
        tb_familiaProdutoPopUp.Text = string.Empty;
    }
    /*Metodo para en evento del boton cancelar PopUp Producto*/
    protected void ib_cancelarProductoPopUp_Click(object sender, ImageClickEventArgs e)
    {
        limpiarCamposPopUpProductos();
        mostrarTodosLosProductos();
        gv_productos.DataBind();
       
    }
    protected void ib_listoDetallesOrdenes_Click(object sender, ImageClickEventArgs e)
    {
        limpiarCamposAgregarDetalles();
        Response.Redirect("OrdenesCompras.aspx");
    }
    protected void limpiarCamposAgregarDetalles()
    {
        tb_cantidad.Text = string.Empty;
        tb_codProducto.Text = string.Empty;
        tb_nombreProducto.Text = string.Empty;
    }
    protected void ib_guardarDetalles_Click(object sender, ImageClickEventArgs e)
    {
        Page.Validate("campoVacio");
        if (Page.IsValid)
        {
            int cod_orden_compra = Convert.ToInt32(lb_resultadoMaxCod.Text);
            int cod_producto = Convert.ToInt32(tb_codProducto.Text);
            int cantidad = Convert.ToInt32(tb_cantidad.Text);
            try
            {


                OrdenesCompras.agregarDetallesOrdenesCompras(cod_orden_compra, cod_producto, cantidad);
                limpiarCamposAgregarDetalles();
                tb_codProveedor_agregar.Enabled = false;
                ddl_monedasAgregar.Enabled = false;
                sqlDS_detallesAgregados.SelectParameters.Clear();
                sqlDS_detallesAgregados.SelectCommand = "SELECT Detalles_Orden_Compras.cod_orden_compra, Detalles_Orden_Compras.nro_renglon, Detalles_Orden_Compras.cod_producto, Productos.nombre, Detalles_Orden_Compras.cantidad, Detalles_Orden_Compras.importe_gs, Detalles_Orden_Compras.importe_me, Detalles_Orden_Compras.cantidad_recibida, Detalles_Orden_Compras.costo_unitario FROM Detalles_Orden_Compras JOIN Productos ON Productos.cod_producto = Detalles_Orden_Compras.cod_producto WHERE Detalles_Orden_Compras.cod_orden_compra =" + cod_orden_compra;
                gv_detallesAgregados.DataBind();

            }
            catch (Exception error)
            {
                lb_error.Text = "ERROR al intentar agregar un detalle puede que ya se haya hecho un registro con ese producto en esta orden de compra ";
                lb_error.Visible = true;
            }
        }
    }
    protected void ib_cancelarAgregar_Click(object sender, ImageClickEventArgs e)
    {
        limpiarCamposAgregarDetalles();
        Response.Redirect("~/Compras/OrdenesCompras.aspx");
    }
    protected void ib_popUpProductos_Click(object sender, ImageClickEventArgs e)
    {
        SqlDataSource_Productos.SelectParameters.Clear();
        SqlDataSource_Productos.SelectCommand = "SELECT DISTINCT Productos.cod_producto, Productos.nombre AS Descripcion, Marcas.descripcion AS Marca, Modelo_Productos.descripcion AS Modelo, Familias_Productos.descripcion AS Familia, Familias_Productos.iva AS IVA, Productos.precio_venta AS PrecioVenta FROM Productos INNER JOIN Familias_Productos ON Productos.cod_familia_producto = Familias_Productos.cod_familia_producto INNER JOIN Modelo_Productos ON Productos.cod_modelo = Modelo_Productos.cod_modelo INNER JOIN Marcas ON Productos.cod_marca = Marcas.cod_marca INNER JOIN Detalles_Cotizaciones ON Productos.cod_producto = Detalles_Cotizaciones.cod_producto INNER JOIN Cotizaciones ON Cotizaciones.cod_cotizacion = Detalles_Cotizaciones.cod_cotizacion AND Cotizaciones.cod_proveedor =  " + Convert.ToInt32(tb_codProveedor_agregar.Text);
        gv_productos.DataBind();
    }
    protected void ib_cancelarBuscar_Click(object sender, ImageClickEventArgs e)
    {
        Response.Redirect("~/Compras/OrdenesCompras.aspx");
        
    }
    protected void ib_reporteBuscar_Click(object sender, ImageClickEventArgs e)
    {
        Response.Redirect("~/ReporteOrdenCompra.aspx");
    }
}
